Environments that support execution of virtual machines running in computer systems can employ management applications to manage the virtual machines and the associated host computer systems. To perform operations on the virtual machines, the management applications can implement multistep workflows, where one or more operations are performed on the virtual machines during each step. For example, in a disaster recovery workflow, protected virtual machines are failed over from a protected site to a recovery site. The disaster recovery workflow includes multiple steps performed on the virtual machines.
When a management application executes a multistep workflow on a set of disparate objects (e.g., virtual machines), the straightforward approach is to perform each step on all the objects to completion before perform the next step. That is, a step is instantiated, all objects are processed for that step, the next step is instantiated, all objects are processed for the next step, and so on. This method of processing allows for a simple state representation for workflow execution that is valid for the entire workflow plan. The drawback to this approach is that all objects of the workflow must be available at the beginning of the workflow and must complete all steps prior to the final step before the first object can complete the workflow. For example, in a disaster recovery workflow, all protected virtual machines must be moved to the recovery site before a single virtual machine can be powered on. In addition, for large numbers of objects and/or as the workflow plan grows in size, the time to complete the first object will increase noticeably.